﻿namespace LM.Servicos
{
    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using LM.InterfacesFabricas.Utilidades;
    using LM.Negocio;
    using LM.Negocio.Objetos;
    using LM.Negocio.Validadores;
    using LM.Repositorios;
    using LM.Repositorios.Interfaces;
    using System.Collections.Generic;

    public class ServicoDeMarca : IServicoDeMarca
    {
        public void Cadastre( DtoMarca marca )
        {
            var repositorioDeMarca = FabricaDeRepositorios.Crie<IRepositorioDeMarca>();
            var validadorDeMarca = new ValidadorDeMarca( repositorioDeMarca );
            var marcaObjeto = ConversorDeObjetos.Copie<Marca>( marca );

            validadorDeMarca.ValideCadastro( marcaObjeto );

            repositorioDeMarca.Cadastre( marcaObjeto );
        }

        public void Atualize( DtoMarca marca )
        {
            var repositorioDeMarca = FabricaDeRepositorios.Crie<IRepositorioDeMarca>();
            var validadorDeMarca = new ValidadorDeMarca( repositorioDeMarca );
            var marcaObjeto = ConversorDeObjetos.Copie<Marca>( marca );

            validadorDeMarca.ValideAtualizacao( marcaObjeto );

            repositorioDeMarca.Atualize( marcaObjeto );
        }

        public void Exclua( int codigo )
        {
            var repositorioDeMarca = FabricaDeRepositorios.Crie<IRepositorioDeMarca>();
            var validadorDeMarca = new ValidadorDeMarca( repositorioDeMarca );
            var marcaObjeto = ConversorDeObjetos.Copie<Marca>( repositorioDeMarca.Consulte( codigo ) );

            validadorDeMarca.ValideExclusao( marcaObjeto );

            repositorioDeMarca.Exclua( marcaObjeto );
        }

        public DtoMarca Consulte( int codigo )
        {
            var marcaObjeto = FabricaDeRepositorios.Crie<IRepositorioDeMarca>().Consulte( codigo );

            return ConversorDeObjetos.Copie<DtoMarca>( marcaObjeto );
        }

        public IList<DtoMarca> ConsulteTodos()
        {
            return ConversorDeObjetos.Copie<DtoMarca, Marca>( FabricaDeRepositorios.Crie<IRepositorioDeMarca>().ConsulteTodos() );
        }
    }
}
